home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / as04.arc / PRNFIX.ASM < prev    next >
Encoding:
Assembly Source File  |  1980-01-01  |  2.5 KB  |  128 lines

  1. ;
  2. progseg segment para public 'CODE'
  3.     public    setcom
  4.     assume    cs:progseg, ds:progseg, es:progseg
  5.     org    100h
  6. doscall equ    21h
  7. ;
  8. startup proc    far
  9.     jmp    setup
  10. ;
  11. flag    db    0f0h         ;set to on default
  12. first    db    0
  13. interupt label dword
  14. vector    db    8 dup(0)    ;only 4 needed 4 more for safety
  15. ctable     label byte
  16.     db    9 dup(' ')
  17.     db    9,10,' ',12,13
  18.     db    13 dup(' ')
  19.     db    27
  20.     db    4 dup(' ')
  21.     db    ' !"#$%&',39,'()*+,-./0123456789:;<=>?@'
  22.     db    'ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`'
  23.     db    'abcdefghijklmnopqrstuvwxyz{|}~'
  24.     db    52 dup(' ')
  25.     db    '|++++++|+++++++++-++++++++-+++++++++++++'
  26.     db    36 dup(' ')
  27. msg    db    0ah,0dh,'Non-printable character intercepter installed and on. (AHA 8503.19)$'
  28. msgon    db    0ah,0dh,'Non-printable character intercepter is now on. (AHA 8503.19)$'
  29. msgoff    db    0ah,0dh,'Non-printable character intercepter is now off. (AHA 8503.19)$'
  30. ;
  31. setcom    proc    far
  32.     cmp    ah,00h
  33.     jnz    exit
  34.     cmp    cs:flag,0
  35.     jnz    exit
  36.     push    bx
  37.     push    ds
  38.     mov    bx,ax
  39.     mov    ax,cs
  40.     mov    ds,ax
  41.     mov    ah,0
  42.     mov    al,[bx+ctable]
  43.     pop    ds
  44.     pop    bx
  45. exit:
  46.     jmp    cs:[interupt]
  47. setcom    endp
  48. ;
  49. ;switch and load program
  50. ;
  51. setup:
  52.     mov    ax,0
  53.     mov    es,ax
  54.     mov    ax,word ptr es:04f0h
  55.     cmp    ax,0000h
  56.     jnz    next        ;first time through ?
  57. ;
  58.     mov    ax,cs        ;get our segment
  59.     mov    word ptr es:04f0h,ax    ;save it
  60.     mov    cs:first,0ffh
  61. next:
  62.     mov    es,ax        ;set es to our code
  63. ;
  64.     mov    al,byte ptr es:flag
  65.     cmp    al,0f0h     ;test if on
  66.     jnz    toff
  67. ;
  68.     push    es
  69.     push    ds
  70.     mov    ax,es
  71.     mov    ds,ax
  72.     mov    ah,35h        ;get interupt vector address function
  73.     mov    al,17h        ;printer interupt vector
  74.     int    doscall     ;go get it
  75. ;
  76.     mov    word ptr ds:vector,bx        ;save offset
  77.     mov    bx,es        ;get segment address
  78.     mov    word ptr ds:vector+2,bx     ;save segment
  79.     pop    ds
  80.     pop    es
  81. ;
  82.     push    ds
  83.     mov    dx,offset setcom ;get new vector address
  84.     mov    ax,es
  85.     mov    ds,ax        ;set segment
  86.     mov    ah,25h        ;set interupt vector address function
  87.     mov    al,17h        ;set to our new interupt vector
  88.     int    doscall     ;set the interupt
  89.     pop    ds
  90. ;
  91.     mov    es:flag,0       ;set to on
  92.     cmp    es:first,0
  93.     jz    ton
  94.     mov    es:first,0
  95.     mov    dx,offset msg
  96.     mov    ah,9
  97.     int    doscall
  98. ;
  99.     mov    dx,offset setup ;terminate and stay resident
  100.     int    27h
  101. ;
  102. ton:
  103.     mov    dx,offset msgon
  104.     mov    ah,9
  105.     int    doscall
  106.     jmp    quit
  107. ;
  108. toff:
  109.     mov    es:flag,0f0h
  110.     mov    dx,word ptr es:vector
  111.     mov    ax,word ptr es:vector+2
  112.     push    ds
  113.     mov    ds,ax        ;set segment
  114.     mov    ah,25h        ;set interupt vector address function
  115.     mov    al,17h        ;set to our new interupt vector
  116.     int    doscall     ;set the interupt
  117.     pop    ds
  118.     mov    dx,offset msgoff
  119.     mov    ah,9
  120.     int    doscall
  121. quit:
  122.     int    20h
  123. ;
  124. startup endp
  125. progseg ends
  126. ;
  127.     end    startup
  128.